// compute/types.go
package compute

import "wgmat/gpucore"

// MatrixRef 是对 GPU 上矩阵的引用。
// 如果 owns == true，则 Close() 会释放 Buffer。
type MatrixRef struct {
	Buffer   gpucore.GPUBuffer
	Rows     uint32
	Cols     uint32
	owns     bool
	PivotBuf gpucore.GPUBuffer // 新增：关联的 pivot buffer（用于 LU）
}

// Close 释放 buffer（仅当 owns == true）
func (m *MatrixRef) Close() {
	if m.owns && m.Buffer != nil {
		m.Buffer.Release()
		m.Buffer = nil
	}
}

// NewOwnedMatrixRef 创建一个拥有 buffer 的 MatrixRef
func NewOwnedMatrixRef(buf gpucore.GPUBuffer, rows, cols uint32) MatrixRef {
	return MatrixRef{Buffer: buf, Rows: rows, Cols: cols, owns: true}
}

// NewBorrowedMatrixRef 创建一个不拥有 buffer 的 MatrixRef（仅引用）
func NewBorrowedMatrixRef(buf gpucore.GPUBuffer, rows, cols uint32) MatrixRef {
	return MatrixRef{Buffer: buf, Rows: rows, Cols: cols, owns: false}
}

type GemmParams struct {
	M, N, K uint32
}
